/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.quality4spl.fm.cvm.impl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EValidator;

import org.eclipse.emf.ecore.impl.EPackageImpl;

import org.quality4spl.fm.cvm.CDMApplication;
import org.quality4spl.fm.cvm.CVMElement;
import org.quality4spl.fm.cvm.Cardinality;
import org.quality4spl.fm.cvm.ComplianceLevel;
import org.quality4spl.fm.cvm.ConfigDecision;
import org.quality4spl.fm.cvm.ConfigDecisionFolder;
import org.quality4spl.fm.cvm.ConfigDecisionModel;
import org.quality4spl.fm.cvm.ConfigDecisionModelElement;
import org.quality4spl.fm.cvm.ConfigDecisionModelEntry;
import org.quality4spl.fm.cvm.CvmFactory;
import org.quality4spl.fm.cvm.CvmPackage;
import org.quality4spl.fm.cvm.DeviationAttributeSet;
import org.quality4spl.fm.cvm.DeviationPermission;
import org.quality4spl.fm.cvm.EntityConfiguration;
import org.quality4spl.fm.cvm.Feature;
import org.quality4spl.fm.cvm.FeatureConfiguration;
import org.quality4spl.fm.cvm.FeatureConstraint;
import org.quality4spl.fm.cvm.FeatureDiagram;
import org.quality4spl.fm.cvm.FeatureGroup;
import org.quality4spl.fm.cvm.FeatureLink;
import org.quality4spl.fm.cvm.FeatureModel;
import org.quality4spl.fm.cvm.FeatureModelElement;
import org.quality4spl.fm.cvm.FeatureModelPrototype;
import org.quality4spl.fm.cvm.FeatureTreeNode;
import org.quality4spl.fm.cvm.Interval;
import org.quality4spl.fm.cvm.NameSequence;
import org.quality4spl.fm.cvm.NamedElement;
import org.quality4spl.fm.cvm.PrimitiveType;
import org.quality4spl.fm.cvm.StringConstrainingType;
import org.quality4spl.fm.cvm.UserAttributeType;
import org.quality4spl.fm.cvm.UserAttributeTypeContext;
import org.quality4spl.fm.cvm.UserAttributeValue;
import org.quality4spl.fm.cvm.VariabilityDiagram;
import org.quality4spl.fm.cvm.VariabilityModel;
import org.quality4spl.fm.cvm.VariabilityModelElement;
import org.quality4spl.fm.cvm.VariabilityModelEntry;
import org.quality4spl.fm.cvm.VariabilityModelFolder;
import org.quality4spl.fm.cvm.VariableEntity;
import org.quality4spl.fm.cvm.VariableEntityPart;
import org.quality4spl.fm.cvm.VariableProperty;
import org.quality4spl.fm.cvm.Visibility;

import org.quality4spl.fm.cvm.util.CvmValidator;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class CvmPackageImpl extends EPackageImpl implements CvmPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass cvmElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variabilityModelElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variabilityModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variabilityModelEntryEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variabilityModelFolderEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureDiagramEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureModelElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureTreeNodeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass cardinalityEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass intervalEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureGroupEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureLinkEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureConstraintEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass deviationAttributeSetEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass configDecisionModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass configDecisionModelEntryEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass configDecisionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass configDecisionFolderEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass configDecisionModelElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureConfigurationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass userAttributeTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass userAttributeValueEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass stringConstrainingTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureModelPrototypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variableEntityEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variablePropertyEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variableEntityPartEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass entityConfigurationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass cdmApplicationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass namedElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass userAttributeTypeContextEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variabilityDiagramEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass nameSequenceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum complianceLevelEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum deviationPermissionEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum primitiveTypeEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum visibilityEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see org.quality4spl.fm.cvm.CvmPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private CvmPackageImpl() {
		super(eNS_URI, CvmFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link CvmPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static CvmPackage init() {
		if (isInited) return (CvmPackage)EPackage.Registry.INSTANCE.getEPackage(CvmPackage.eNS_URI);

		// Obtain or create and register package
		CvmPackageImpl theCvmPackage = (CvmPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof CvmPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new CvmPackageImpl());

		isInited = true;

		// Create package meta-data objects
		theCvmPackage.createPackageContents();

		// Initialize created meta-data
		theCvmPackage.initializePackageContents();

		// Register package validator
		EValidator.Registry.INSTANCE.put
			(theCvmPackage, 
			 new EValidator.Descriptor() {
				 public EValidator getEValidator() {
					 return CvmValidator.INSTANCE;
				 }
			 });

		// Mark meta-data to indicate it can't be changed
		theCvmPackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(CvmPackage.eNS_URI, theCvmPackage);
		return theCvmPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCVMElement() {
		return cvmElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariabilityModelElement() {
		return variabilityModelElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getVariabilityModelElement_Id() {
		return (EAttribute)variabilityModelElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getVariabilityModelElement_AuthorName() {
		return (EAttribute)variabilityModelElementEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariabilityModelElement_UserAttributeValues() {
		return (EReference)variabilityModelElementEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariabilityModel() {
		return variabilityModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariabilityModel_RootEntries() {
		return (EReference)variabilityModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariabilityModelEntry() {
		return variabilityModelEntryEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariabilityModelEntry_ParentModel() {
		return (EReference)variabilityModelEntryEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariabilityModelEntry_ParentFolder() {
		return (EReference)variabilityModelEntryEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getVariabilityModelEntry_Visibility() {
		return (EAttribute)variabilityModelEntryEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariabilityModelFolder() {
		return variabilityModelFolderEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariabilityModelFolder_ChildEntries() {
		return (EReference)variabilityModelFolderEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureDiagram() {
		return featureDiagramEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureDiagram_FeatureModel() {
		return (EReference)featureDiagramEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureDiagram_Diagram() {
		return (EReference)featureDiagramEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureModelElement() {
		return featureModelElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureModel() {
		return featureModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureModel_ComplianceLevel() {
		return (EAttribute)featureModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureModel_ReferenceModel() {
		return (EReference)featureModelEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureModel_FeatureDiagrams() {
		return (EReference)featureModelEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureModel_RootFeatures() {
		return (EReference)featureModelEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureModel_FeatureLinks() {
		return (EReference)featureModelEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureModel_FeatureConstraints() {
		return (EReference)featureModelEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeature() {
		return featureEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_Cardinality() {
		return (EReference)featureEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_ParentModel() {
		return (EReference)featureEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_ParentGroup() {
		return (EReference)featureEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_ChildNodes() {
		return (EReference)featureEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeature_Removed() {
		return (EAttribute)featureEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_ReferenceFeature() {
		return (EReference)featureEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_StartingLinks() {
		return (EReference)featureEClass.getEStructuralFeatures().get(6);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_EndingLinks() {
		return (EReference)featureEClass.getEStructuralFeatures().get(7);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_OutgoingLinks() {
		return (EReference)featureEClass.getEStructuralFeatures().get(8);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_IncomingLinks() {
		return (EReference)featureEClass.getEStructuralFeatures().get(9);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_DeviationAttributeSet() {
		return (EReference)featureEClass.getEStructuralFeatures().get(10);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_ParameterType() {
		return (EReference)featureEClass.getEStructuralFeatures().get(11);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_ExtendedFeatures() {
		return (EReference)featureEClass.getEStructuralFeatures().get(12);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeature_ExtendedBy() {
		return (EReference)featureEClass.getEStructuralFeatures().get(13);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureTreeNode() {
		return featureTreeNodeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureTreeNode_ParentFeature() {
		return (EReference)featureTreeNodeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCardinality() {
		return cardinalityEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCardinality_Intervals() {
		return (EReference)cardinalityEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getInterval() {
		return intervalEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getInterval_Start() {
		return (EAttribute)intervalEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getInterval_End() {
		return (EAttribute)intervalEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureGroup() {
		return featureGroupEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureGroup_Cardinality() {
		return (EReference)featureGroupEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureGroup_ChildFeatures() {
		return (EReference)featureGroupEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureGroup_Description() {
		return (EAttribute)featureGroupEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureLink() {
		return featureLinkEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureLink_Type() {
		return (EAttribute)featureLinkEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureLink_Bidirectional() {
		return (EAttribute)featureLinkEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureLink_FeatureModel() {
		return (EReference)featureLinkEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureLink_Start() {
		return (EReference)featureLinkEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureLink_End() {
		return (EReference)featureLinkEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureLink_Description() {
		return (EAttribute)featureLinkEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureConstraint() {
		return featureConstraintEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureConstraint_FeatureModel() {
		return (EReference)featureConstraintEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureConstraint_Constraint() {
		return (EAttribute)featureConstraintEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureConstraint_Description() {
		return (EAttribute)featureConstraintEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDeviationAttributeSet() {
		return deviationAttributeSetEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowChangeName() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowChangeDesc() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowChangeParam() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowChangeCard() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowRemoval() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowMove() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowRefinement() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(6);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowReduction() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(7);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowRegrouping() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(8);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDeviationAttributeSet_AllowReordering() {
		return (EAttribute)deviationAttributeSetEClass.getEStructuralFeatures().get(9);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getConfigDecisionModel() {
		return configDecisionModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getConfigDecisionModel_RootEntries() {
		return (EReference)configDecisionModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getConfigDecisionModel_SourceFeatureModels() {
		return (EReference)configDecisionModelEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getConfigDecisionModel_TargetFeatureModels() {
		return (EReference)configDecisionModelEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getConfigDecisionModelEntry() {
		return configDecisionModelEntryEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getConfigDecisionModelEntry_ParentModel() {
		return (EReference)configDecisionModelEntryEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getConfigDecisionModelEntry_ParentFolder() {
		return (EReference)configDecisionModelEntryEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getConfigDecisionModelEntry_Active() {
		return (EAttribute)configDecisionModelEntryEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getConfigDecision() {
		return configDecisionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getConfigDecision_InclusionCriterion() {
		return (EAttribute)configDecisionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getConfigDecision_IncludedFeatures() {
		return (EAttribute)configDecisionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getConfigDecision_ExcludedFeatures() {
		return (EAttribute)configDecisionEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getConfigDecision_PersonInCharge() {
		return (EAttribute)configDecisionEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getConfigDecision_Rationale() {
		return (EAttribute)configDecisionEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getConfigDecision_Equivalence() {
		return (EAttribute)configDecisionEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getConfigDecisionFolder() {
		return configDecisionFolderEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getConfigDecisionFolder_ChildEntries() {
		return (EReference)configDecisionFolderEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getConfigDecisionModelElement() {
		return configDecisionModelElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureConfiguration() {
		return featureConfigurationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureConfiguration_PreviousConfigurationStep() {
		return (EReference)featureConfigurationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureConfiguration_ConfiguredFeatureModel() {
		return (EReference)featureConfigurationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getUserAttributeType() {
		return userAttributeTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUserAttributeType_Key() {
		return (EAttribute)userAttributeTypeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUserAttributeType_ValidFor() {
		return (EAttribute)userAttributeTypeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUserAttributeType_Description() {
		return (EAttribute)userAttributeTypeEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getUserAttributeType_Context() {
		return (EReference)userAttributeTypeEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getUserAttributeType_Type() {
		return (EReference)userAttributeTypeEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getUserAttributeValue() {
		return userAttributeValueEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUserAttributeValue_Key() {
		return (EAttribute)userAttributeValueEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getUserAttributeValue_Value() {
		return (EAttribute)userAttributeValueEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getUserAttributeValue_Element() {
		return (EReference)userAttributeValueEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getStringConstrainingType() {
		return stringConstrainingTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getStringConstrainingType_PrimitiveType() {
		return (EAttribute)stringConstrainingTypeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getStringConstrainingType_Min() {
		return (EAttribute)stringConstrainingTypeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getStringConstrainingType_Max() {
		return (EAttribute)stringConstrainingTypeEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getStringConstrainingType_Pattern() {
		return (EAttribute)stringConstrainingTypeEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getStringConstrainingType_Values() {
		return (EAttribute)stringConstrainingTypeEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getStringConstrainingType_Default() {
		return (EAttribute)stringConstrainingTypeEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureModelPrototype() {
		return featureModelPrototypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureModelPrototype_PrototypeName() {
		return (EAttribute)featureModelPrototypeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureModelPrototype_Path() {
		return (EAttribute)featureModelPrototypeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureModelPrototype_Type() {
		return (EReference)featureModelPrototypeEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariableEntity() {
		return variableEntityEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariableEntity_AllProperties() {
		return (EReference)variableEntityEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariableEntity_Parts() {
		return (EReference)variableEntityEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariableEntity_Applications() {
		return (EReference)variableEntityEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariableEntity_Diagram() {
		return (EReference)variableEntityEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariableProperty() {
		return variablePropertyEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariableProperty_ParentEntity() {
		return (EReference)variablePropertyEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getVariableProperty_Optional() {
		return (EAttribute)variablePropertyEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getVariableProperty_Visibility() {
		return (EAttribute)variablePropertyEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariableEntityPart() {
		return variableEntityPartEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariableEntityPart_Type() {
		return (EReference)variableEntityPartEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEntityConfiguration() {
		return entityConfigurationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEntityConfiguration_FeatureConfigurations() {
		return (EReference)entityConfigurationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEntityConfiguration_SubEntityConfigurations() {
		return (EReference)entityConfigurationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEntityConfiguration_ConfiguredEntity() {
		return (EReference)entityConfigurationEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEntityConfiguration_ConfiguredPart() {
		return (EReference)entityConfigurationEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEntityConfiguration_SelectedProperties() {
		return (EAttribute)entityConfigurationEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEntityConfiguration_DeselectedProperties() {
		return (EAttribute)entityConfigurationEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCDMApplication() {
		return cdmApplicationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCDMApplication_SourceConfigurations() {
		return (EReference)cdmApplicationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCDMApplication_TargetConfigurations() {
		return (EReference)cdmApplicationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCDMApplication_AppliedCDM() {
		return (EReference)cdmApplicationEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getNamedElement() {
		return namedElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getNamedElement_Name() {
		return (EAttribute)namedElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getNamedElement_Description() {
		return (EAttribute)namedElementEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getUserAttributeTypeContext() {
		return userAttributeTypeContextEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getUserAttributeTypeContext_UserAttributeTypes() {
		return (EReference)userAttributeTypeContextEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariabilityDiagram() {
		return variabilityDiagramEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getVariabilityDiagram_Diagram() {
		return (EReference)variabilityDiagramEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getNameSequence() {
		return nameSequenceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getNameSequence_Names() {
		return (EReference)nameSequenceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getNameSequence_InitialSize() {
		return (EAttribute)nameSequenceEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getComplianceLevel() {
		return complianceLevelEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getDeviationPermission() {
		return deviationPermissionEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getPrimitiveType() {
		return primitiveTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getVisibility() {
		return visibilityEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public CvmFactory getCvmFactory() {
		return (CvmFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		cvmElementEClass = createEClass(CVM_ELEMENT);

		variabilityModelElementEClass = createEClass(VARIABILITY_MODEL_ELEMENT);
		createEAttribute(variabilityModelElementEClass, VARIABILITY_MODEL_ELEMENT__ID);
		createEAttribute(variabilityModelElementEClass, VARIABILITY_MODEL_ELEMENT__AUTHOR_NAME);
		createEReference(variabilityModelElementEClass, VARIABILITY_MODEL_ELEMENT__USER_ATTRIBUTE_VALUES);

		variabilityModelEClass = createEClass(VARIABILITY_MODEL);
		createEReference(variabilityModelEClass, VARIABILITY_MODEL__ROOT_ENTRIES);

		variabilityModelEntryEClass = createEClass(VARIABILITY_MODEL_ENTRY);
		createEReference(variabilityModelEntryEClass, VARIABILITY_MODEL_ENTRY__PARENT_MODEL);
		createEReference(variabilityModelEntryEClass, VARIABILITY_MODEL_ENTRY__PARENT_FOLDER);
		createEAttribute(variabilityModelEntryEClass, VARIABILITY_MODEL_ENTRY__VISIBILITY);

		variabilityModelFolderEClass = createEClass(VARIABILITY_MODEL_FOLDER);
		createEReference(variabilityModelFolderEClass, VARIABILITY_MODEL_FOLDER__CHILD_ENTRIES);

		featureDiagramEClass = createEClass(FEATURE_DIAGRAM);
		createEReference(featureDiagramEClass, FEATURE_DIAGRAM__FEATURE_MODEL);
		createEReference(featureDiagramEClass, FEATURE_DIAGRAM__DIAGRAM);

		featureModelElementEClass = createEClass(FEATURE_MODEL_ELEMENT);

		featureModelEClass = createEClass(FEATURE_MODEL);
		createEAttribute(featureModelEClass, FEATURE_MODEL__COMPLIANCE_LEVEL);
		createEReference(featureModelEClass, FEATURE_MODEL__REFERENCE_MODEL);
		createEReference(featureModelEClass, FEATURE_MODEL__FEATURE_DIAGRAMS);
		createEReference(featureModelEClass, FEATURE_MODEL__ROOT_FEATURES);
		createEReference(featureModelEClass, FEATURE_MODEL__FEATURE_LINKS);
		createEReference(featureModelEClass, FEATURE_MODEL__FEATURE_CONSTRAINTS);

		featureEClass = createEClass(FEATURE);
		createEReference(featureEClass, FEATURE__CARDINALITY);
		createEReference(featureEClass, FEATURE__PARENT_MODEL);
		createEReference(featureEClass, FEATURE__PARENT_GROUP);
		createEReference(featureEClass, FEATURE__CHILD_NODES);
		createEAttribute(featureEClass, FEATURE__REMOVED);
		createEReference(featureEClass, FEATURE__REFERENCE_FEATURE);
		createEReference(featureEClass, FEATURE__STARTING_LINKS);
		createEReference(featureEClass, FEATURE__ENDING_LINKS);
		createEReference(featureEClass, FEATURE__OUTGOING_LINKS);
		createEReference(featureEClass, FEATURE__INCOMING_LINKS);
		createEReference(featureEClass, FEATURE__DEVIATION_ATTRIBUTE_SET);
		createEReference(featureEClass, FEATURE__PARAMETER_TYPE);
		createEReference(featureEClass, FEATURE__EXTENDED_FEATURES);
		createEReference(featureEClass, FEATURE__EXTENDED_BY);

		featureTreeNodeEClass = createEClass(FEATURE_TREE_NODE);
		createEReference(featureTreeNodeEClass, FEATURE_TREE_NODE__PARENT_FEATURE);

		cardinalityEClass = createEClass(CARDINALITY);
		createEReference(cardinalityEClass, CARDINALITY__INTERVALS);

		intervalEClass = createEClass(INTERVAL);
		createEAttribute(intervalEClass, INTERVAL__START);
		createEAttribute(intervalEClass, INTERVAL__END);

		featureGroupEClass = createEClass(FEATURE_GROUP);
		createEReference(featureGroupEClass, FEATURE_GROUP__CARDINALITY);
		createEReference(featureGroupEClass, FEATURE_GROUP__CHILD_FEATURES);
		createEAttribute(featureGroupEClass, FEATURE_GROUP__DESCRIPTION);

		featureLinkEClass = createEClass(FEATURE_LINK);
		createEAttribute(featureLinkEClass, FEATURE_LINK__TYPE);
		createEAttribute(featureLinkEClass, FEATURE_LINK__BIDIRECTIONAL);
		createEReference(featureLinkEClass, FEATURE_LINK__FEATURE_MODEL);
		createEReference(featureLinkEClass, FEATURE_LINK__START);
		createEReference(featureLinkEClass, FEATURE_LINK__END);
		createEAttribute(featureLinkEClass, FEATURE_LINK__DESCRIPTION);

		featureConstraintEClass = createEClass(FEATURE_CONSTRAINT);
		createEReference(featureConstraintEClass, FEATURE_CONSTRAINT__FEATURE_MODEL);
		createEAttribute(featureConstraintEClass, FEATURE_CONSTRAINT__CONSTRAINT);
		createEAttribute(featureConstraintEClass, FEATURE_CONSTRAINT__DESCRIPTION);

		deviationAttributeSetEClass = createEClass(DEVIATION_ATTRIBUTE_SET);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_CHANGE_NAME);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_CHANGE_DESC);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_CHANGE_PARAM);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_CHANGE_CARD);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_REMOVAL);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_MOVE);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_REFINEMENT);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_REDUCTION);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_REGROUPING);
		createEAttribute(deviationAttributeSetEClass, DEVIATION_ATTRIBUTE_SET__ALLOW_REORDERING);

		configDecisionModelEClass = createEClass(CONFIG_DECISION_MODEL);
		createEReference(configDecisionModelEClass, CONFIG_DECISION_MODEL__ROOT_ENTRIES);
		createEReference(configDecisionModelEClass, CONFIG_DECISION_MODEL__SOURCE_FEATURE_MODELS);
		createEReference(configDecisionModelEClass, CONFIG_DECISION_MODEL__TARGET_FEATURE_MODELS);

		configDecisionModelEntryEClass = createEClass(CONFIG_DECISION_MODEL_ENTRY);
		createEReference(configDecisionModelEntryEClass, CONFIG_DECISION_MODEL_ENTRY__PARENT_MODEL);
		createEReference(configDecisionModelEntryEClass, CONFIG_DECISION_MODEL_ENTRY__PARENT_FOLDER);
		createEAttribute(configDecisionModelEntryEClass, CONFIG_DECISION_MODEL_ENTRY__ACTIVE);

		configDecisionEClass = createEClass(CONFIG_DECISION);
		createEAttribute(configDecisionEClass, CONFIG_DECISION__INCLUSION_CRITERION);
		createEAttribute(configDecisionEClass, CONFIG_DECISION__INCLUDED_FEATURES);
		createEAttribute(configDecisionEClass, CONFIG_DECISION__EXCLUDED_FEATURES);
		createEAttribute(configDecisionEClass, CONFIG_DECISION__PERSON_IN_CHARGE);
		createEAttribute(configDecisionEClass, CONFIG_DECISION__RATIONALE);
		createEAttribute(configDecisionEClass, CONFIG_DECISION__EQUIVALENCE);

		configDecisionFolderEClass = createEClass(CONFIG_DECISION_FOLDER);
		createEReference(configDecisionFolderEClass, CONFIG_DECISION_FOLDER__CHILD_ENTRIES);

		configDecisionModelElementEClass = createEClass(CONFIG_DECISION_MODEL_ELEMENT);

		featureConfigurationEClass = createEClass(FEATURE_CONFIGURATION);
		createEReference(featureConfigurationEClass, FEATURE_CONFIGURATION__PREVIOUS_CONFIGURATION_STEP);
		createEReference(featureConfigurationEClass, FEATURE_CONFIGURATION__CONFIGURED_FEATURE_MODEL);

		userAttributeTypeEClass = createEClass(USER_ATTRIBUTE_TYPE);
		createEAttribute(userAttributeTypeEClass, USER_ATTRIBUTE_TYPE__KEY);
		createEAttribute(userAttributeTypeEClass, USER_ATTRIBUTE_TYPE__VALID_FOR);
		createEAttribute(userAttributeTypeEClass, USER_ATTRIBUTE_TYPE__DESCRIPTION);
		createEReference(userAttributeTypeEClass, USER_ATTRIBUTE_TYPE__CONTEXT);
		createEReference(userAttributeTypeEClass, USER_ATTRIBUTE_TYPE__TYPE);

		userAttributeValueEClass = createEClass(USER_ATTRIBUTE_VALUE);
		createEAttribute(userAttributeValueEClass, USER_ATTRIBUTE_VALUE__KEY);
		createEAttribute(userAttributeValueEClass, USER_ATTRIBUTE_VALUE__VALUE);
		createEReference(userAttributeValueEClass, USER_ATTRIBUTE_VALUE__ELEMENT);

		stringConstrainingTypeEClass = createEClass(STRING_CONSTRAINING_TYPE);
		createEAttribute(stringConstrainingTypeEClass, STRING_CONSTRAINING_TYPE__PRIMITIVE_TYPE);
		createEAttribute(stringConstrainingTypeEClass, STRING_CONSTRAINING_TYPE__MIN);
		createEAttribute(stringConstrainingTypeEClass, STRING_CONSTRAINING_TYPE__MAX);
		createEAttribute(stringConstrainingTypeEClass, STRING_CONSTRAINING_TYPE__PATTERN);
		createEAttribute(stringConstrainingTypeEClass, STRING_CONSTRAINING_TYPE__VALUES);
		createEAttribute(stringConstrainingTypeEClass, STRING_CONSTRAINING_TYPE__DEFAULT);

		featureModelPrototypeEClass = createEClass(FEATURE_MODEL_PROTOTYPE);
		createEAttribute(featureModelPrototypeEClass, FEATURE_MODEL_PROTOTYPE__PROTOTYPE_NAME);
		createEAttribute(featureModelPrototypeEClass, FEATURE_MODEL_PROTOTYPE__PATH);
		createEReference(featureModelPrototypeEClass, FEATURE_MODEL_PROTOTYPE__TYPE);

		variableEntityEClass = createEClass(VARIABLE_ENTITY);
		createEReference(variableEntityEClass, VARIABLE_ENTITY__ALL_PROPERTIES);
		createEReference(variableEntityEClass, VARIABLE_ENTITY__PARTS);
		createEReference(variableEntityEClass, VARIABLE_ENTITY__APPLICATIONS);
		createEReference(variableEntityEClass, VARIABLE_ENTITY__DIAGRAM);

		variablePropertyEClass = createEClass(VARIABLE_PROPERTY);
		createEReference(variablePropertyEClass, VARIABLE_PROPERTY__PARENT_ENTITY);
		createEAttribute(variablePropertyEClass, VARIABLE_PROPERTY__OPTIONAL);
		createEAttribute(variablePropertyEClass, VARIABLE_PROPERTY__VISIBILITY);

		variableEntityPartEClass = createEClass(VARIABLE_ENTITY_PART);
		createEReference(variableEntityPartEClass, VARIABLE_ENTITY_PART__TYPE);

		entityConfigurationEClass = createEClass(ENTITY_CONFIGURATION);
		createEReference(entityConfigurationEClass, ENTITY_CONFIGURATION__FEATURE_CONFIGURATIONS);
		createEReference(entityConfigurationEClass, ENTITY_CONFIGURATION__SUB_ENTITY_CONFIGURATIONS);
		createEReference(entityConfigurationEClass, ENTITY_CONFIGURATION__CONFIGURED_ENTITY);
		createEReference(entityConfigurationEClass, ENTITY_CONFIGURATION__CONFIGURED_PART);
		createEAttribute(entityConfigurationEClass, ENTITY_CONFIGURATION__SELECTED_PROPERTIES);
		createEAttribute(entityConfigurationEClass, ENTITY_CONFIGURATION__DESELECTED_PROPERTIES);

		cdmApplicationEClass = createEClass(CDM_APPLICATION);
		createEReference(cdmApplicationEClass, CDM_APPLICATION__SOURCE_CONFIGURATIONS);
		createEReference(cdmApplicationEClass, CDM_APPLICATION__TARGET_CONFIGURATIONS);
		createEReference(cdmApplicationEClass, CDM_APPLICATION__APPLIED_CDM);

		namedElementEClass = createEClass(NAMED_ELEMENT);
		createEAttribute(namedElementEClass, NAMED_ELEMENT__NAME);
		createEAttribute(namedElementEClass, NAMED_ELEMENT__DESCRIPTION);

		userAttributeTypeContextEClass = createEClass(USER_ATTRIBUTE_TYPE_CONTEXT);
		createEReference(userAttributeTypeContextEClass, USER_ATTRIBUTE_TYPE_CONTEXT__USER_ATTRIBUTE_TYPES);

		variabilityDiagramEClass = createEClass(VARIABILITY_DIAGRAM);
		createEReference(variabilityDiagramEClass, VARIABILITY_DIAGRAM__DIAGRAM);

		nameSequenceEClass = createEClass(NAME_SEQUENCE);
		createEReference(nameSequenceEClass, NAME_SEQUENCE__NAMES);
		createEAttribute(nameSequenceEClass, NAME_SEQUENCE__INITIAL_SIZE);

		// Create enums
		complianceLevelEEnum = createEEnum(COMPLIANCE_LEVEL);
		deviationPermissionEEnum = createEEnum(DEVIATION_PERMISSION);
		primitiveTypeEEnum = createEEnum(PRIMITIVE_TYPE);
		visibilityEEnum = createEEnum(VISIBILITY);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		variabilityModelElementEClass.getESuperTypes().add(this.getCVMElement());
		variabilityModelEClass.getESuperTypes().add(this.getVariabilityModelElement());
		variabilityModelEClass.getESuperTypes().add(this.getNamedElement());
		variabilityModelEClass.getESuperTypes().add(this.getUserAttributeTypeContext());
		variabilityModelEntryEClass.getESuperTypes().add(this.getVariabilityModelElement());
		variabilityModelEntryEClass.getESuperTypes().add(this.getNamedElement());
		variabilityModelEntryEClass.getESuperTypes().add(this.getUserAttributeTypeContext());
		variabilityModelFolderEClass.getESuperTypes().add(this.getVariabilityModelEntry());
		featureDiagramEClass.getESuperTypes().add(this.getFeatureModelElement());
		featureDiagramEClass.getESuperTypes().add(this.getNamedElement());
		featureModelElementEClass.getESuperTypes().add(this.getVariabilityModelElement());
		featureModelEClass.getESuperTypes().add(this.getFeatureModelElement());
		featureModelEClass.getESuperTypes().add(this.getVariabilityModelEntry());
		featureEClass.getESuperTypes().add(this.getFeatureTreeNode());
		featureEClass.getESuperTypes().add(this.getNamedElement());
		featureTreeNodeEClass.getESuperTypes().add(this.getFeatureModelElement());
		cardinalityEClass.getESuperTypes().add(this.getCVMElement());
		intervalEClass.getESuperTypes().add(this.getCVMElement());
		featureGroupEClass.getESuperTypes().add(this.getFeatureTreeNode());
		featureLinkEClass.getESuperTypes().add(this.getFeatureModelElement());
		featureConstraintEClass.getESuperTypes().add(this.getFeatureModelElement());
		deviationAttributeSetEClass.getESuperTypes().add(this.getCVMElement());
		configDecisionModelEClass.getESuperTypes().add(this.getConfigDecisionModelElement());
		configDecisionModelEClass.getESuperTypes().add(this.getVariabilityModelEntry());
		configDecisionModelEntryEClass.getESuperTypes().add(this.getConfigDecisionModelElement());
		configDecisionEClass.getESuperTypes().add(this.getConfigDecisionModelEntry());
		configDecisionFolderEClass.getESuperTypes().add(this.getConfigDecisionModelEntry());
		configDecisionFolderEClass.getESuperTypes().add(this.getNamedElement());
		configDecisionModelElementEClass.getESuperTypes().add(this.getVariabilityModelElement());
		featureConfigurationEClass.getESuperTypes().add(this.getConfigDecisionModel());
		userAttributeTypeEClass.getESuperTypes().add(this.getCVMElement());
		userAttributeValueEClass.getESuperTypes().add(this.getCVMElement());
		stringConstrainingTypeEClass.getESuperTypes().add(this.getCVMElement());
		featureModelPrototypeEClass.getESuperTypes().add(this.getNamedElement());
		variableEntityEClass.getESuperTypes().add(this.getVariabilityModelFolder());
		variablePropertyEClass.getESuperTypes().add(this.getVariabilityModelElement());
		variablePropertyEClass.getESuperTypes().add(this.getNamedElement());
		variableEntityPartEClass.getESuperTypes().add(this.getVariableProperty());
		entityConfigurationEClass.getESuperTypes().add(this.getVariabilityModelEntry());
		cdmApplicationEClass.getESuperTypes().add(this.getCVMElement());
		namedElementEClass.getESuperTypes().add(this.getCVMElement());
		userAttributeTypeContextEClass.getESuperTypes().add(this.getCVMElement());
		variabilityDiagramEClass.getESuperTypes().add(this.getVariabilityModelEntry());
		nameSequenceEClass.getESuperTypes().add(this.getCVMElement());

		// Initialize classes and features; add operations and parameters
		initEClass(cvmElementEClass, CVMElement.class, "CVMElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(variabilityModelElementEClass, VariabilityModelElement.class, "VariabilityModelElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getVariabilityModelElement_Id(), ecorePackage.getEString(), "id", null, 0, 1, VariabilityModelElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getVariabilityModelElement_AuthorName(), ecorePackage.getEString(), "authorName", "", 1, 1, VariabilityModelElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getVariabilityModelElement_UserAttributeValues(), this.getUserAttributeValue(), this.getUserAttributeValue_Element(), "userAttributeValues", null, 0, -1, VariabilityModelElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variabilityModelEClass, VariabilityModel.class, "VariabilityModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariabilityModel_RootEntries(), this.getVariabilityModelEntry(), this.getVariabilityModelEntry_ParentModel(), "rootEntries", null, 0, -1, VariabilityModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variabilityModelEntryEClass, VariabilityModelEntry.class, "VariabilityModelEntry", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariabilityModelEntry_ParentModel(), this.getVariabilityModel(), this.getVariabilityModel_RootEntries(), "parentModel", null, 0, 1, VariabilityModelEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getVariabilityModelEntry_ParentFolder(), this.getVariabilityModelFolder(), this.getVariabilityModelFolder_ChildEntries(), "parentFolder", null, 0, 1, VariabilityModelEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getVariabilityModelEntry_Visibility(), this.getVisibility(), "visibility", null, 0, 1, VariabilityModelEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variabilityModelFolderEClass, VariabilityModelFolder.class, "VariabilityModelFolder", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariabilityModelFolder_ChildEntries(), this.getVariabilityModelEntry(), this.getVariabilityModelEntry_ParentFolder(), "childEntries", null, 0, -1, VariabilityModelFolder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureDiagramEClass, FeatureDiagram.class, "FeatureDiagram", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getFeatureDiagram_FeatureModel(), this.getFeatureModel(), this.getFeatureModel_FeatureDiagrams(), "featureModel", null, 1, 1, FeatureDiagram.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureDiagram_Diagram(), ecorePackage.getEObject(), null, "diagram", null, 0, 1, FeatureDiagram.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureModelElementEClass, FeatureModelElement.class, "FeatureModelElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(featureModelEClass, FeatureModel.class, "FeatureModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getFeatureModel_ComplianceLevel(), this.getComplianceLevel(), "complianceLevel", null, 1, 1, FeatureModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureModel_ReferenceModel(), this.getFeatureModel(), null, "referenceModel", null, 0, 1, FeatureModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureModel_FeatureDiagrams(), this.getFeatureDiagram(), this.getFeatureDiagram_FeatureModel(), "featureDiagrams", null, 0, -1, FeatureModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureModel_RootFeatures(), this.getFeature(), this.getFeature_ParentModel(), "rootFeatures", null, 0, -1, FeatureModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureModel_FeatureLinks(), this.getFeatureLink(), this.getFeatureLink_FeatureModel(), "featureLinks", null, 0, -1, FeatureModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureModel_FeatureConstraints(), this.getFeatureConstraint(), this.getFeatureConstraint_FeatureModel(), "featureConstraints", null, 0, -1, FeatureModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureEClass, Feature.class, "Feature", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getFeature_Cardinality(), this.getCardinality(), null, "cardinality", null, 0, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_ParentModel(), this.getFeatureModel(), this.getFeatureModel_RootFeatures(), "parentModel", null, 0, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_ParentGroup(), this.getFeatureGroup(), this.getFeatureGroup_ChildFeatures(), "parentGroup", null, 0, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_ChildNodes(), this.getFeatureTreeNode(), this.getFeatureTreeNode_ParentFeature(), "childNodes", null, 0, -1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getFeature_Removed(), ecorePackage.getEBoolean(), "removed", null, 1, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_ReferenceFeature(), this.getFeature(), null, "referenceFeature", null, 0, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_StartingLinks(), this.getFeatureLink(), this.getFeatureLink_Start(), "startingLinks", null, 0, -1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_EndingLinks(), this.getFeatureLink(), this.getFeatureLink_End(), "endingLinks", null, 0, -1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_OutgoingLinks(), this.getFeatureLink(), null, "outgoingLinks", null, 0, -1, Feature.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_IncomingLinks(), this.getFeatureLink(), null, "incomingLinks", null, 0, -1, Feature.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_DeviationAttributeSet(), this.getDeviationAttributeSet(), null, "deviationAttributeSet", null, 0, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_ParameterType(), this.getStringConstrainingType(), null, "parameterType", null, 0, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_ExtendedFeatures(), this.getFeature(), this.getFeature_ExtendedBy(), "extendedFeatures", null, 0, -1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeature_ExtendedBy(), this.getFeature(), this.getFeature_ExtendedFeatures(), "extendedBy", null, 0, -1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureTreeNodeEClass, FeatureTreeNode.class, "FeatureTreeNode", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getFeatureTreeNode_ParentFeature(), this.getFeature(), this.getFeature_ChildNodes(), "parentFeature", null, 0, 1, FeatureTreeNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(cardinalityEClass, Cardinality.class, "Cardinality", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCardinality_Intervals(), this.getInterval(), null, "intervals", null, 0, -1, Cardinality.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(intervalEClass, Interval.class, "Interval", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getInterval_Start(), ecorePackage.getEInt(), "start", null, 1, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getInterval_End(), ecorePackage.getEInt(), "end", null, 1, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureGroupEClass, FeatureGroup.class, "FeatureGroup", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getFeatureGroup_Cardinality(), this.getCardinality(), null, "cardinality", null, 1, 1, FeatureGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureGroup_ChildFeatures(), this.getFeature(), this.getFeature_ParentGroup(), "childFeatures", null, 0, -1, FeatureGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getFeatureGroup_Description(), ecorePackage.getEString(), "description", null, 0, 1, FeatureGroup.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureLinkEClass, FeatureLink.class, "FeatureLink", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getFeatureLink_Type(), ecorePackage.getEString(), "type", null, 0, 1, FeatureLink.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getFeatureLink_Bidirectional(), ecorePackage.getEBoolean(), "bidirectional", null, 0, 1, FeatureLink.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureLink_FeatureModel(), this.getFeatureModel(), this.getFeatureModel_FeatureLinks(), "featureModel", null, 1, 1, FeatureLink.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureLink_Start(), this.getFeature(), this.getFeature_StartingLinks(), "start", null, 1, 1, FeatureLink.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureLink_End(), this.getFeature(), this.getFeature_EndingLinks(), "end", null, 1, 1, FeatureLink.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getFeatureLink_Description(), ecorePackage.getEString(), "description", null, 0, 1, FeatureLink.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureConstraintEClass, FeatureConstraint.class, "FeatureConstraint", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getFeatureConstraint_FeatureModel(), this.getFeatureModel(), this.getFeatureModel_FeatureConstraints(), "featureModel", null, 1, 1, FeatureConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getFeatureConstraint_Constraint(), ecorePackage.getEString(), "constraint", null, 0, 1, FeatureConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getFeatureConstraint_Description(), ecorePackage.getEString(), "description", null, 0, 1, FeatureConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(deviationAttributeSetEClass, DeviationAttributeSet.class, "DeviationAttributeSet", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getDeviationAttributeSet_AllowChangeName(), this.getDeviationPermission(), "allowChangeName", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowChangeDesc(), this.getDeviationPermission(), "allowChangeDesc", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowChangeParam(), this.getDeviationPermission(), "allowChangeParam", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowChangeCard(), this.getDeviationPermission(), "allowChangeCard", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowRemoval(), this.getDeviationPermission(), "allowRemoval", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowMove(), this.getDeviationPermission(), "allowMove", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowRefinement(), this.getDeviationPermission(), "allowRefinement", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowReduction(), this.getDeviationPermission(), "allowReduction", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowRegrouping(), this.getDeviationPermission(), "allowRegrouping", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDeviationAttributeSet_AllowReordering(), this.getDeviationPermission(), "allowReordering", "YES", 0, 1, DeviationAttributeSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(configDecisionModelEClass, ConfigDecisionModel.class, "ConfigDecisionModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getConfigDecisionModel_RootEntries(), this.getConfigDecisionModelEntry(), this.getConfigDecisionModelEntry_ParentModel(), "rootEntries", null, 0, -1, ConfigDecisionModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getConfigDecisionModel_SourceFeatureModels(), this.getFeatureModelPrototype(), null, "sourceFeatureModels", null, 0, -1, ConfigDecisionModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getConfigDecisionModel_TargetFeatureModels(), this.getFeatureModelPrototype(), null, "targetFeatureModels", null, 0, -1, ConfigDecisionModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(configDecisionModelEntryEClass, ConfigDecisionModelEntry.class, "ConfigDecisionModelEntry", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getConfigDecisionModelEntry_ParentModel(), this.getConfigDecisionModel(), this.getConfigDecisionModel_RootEntries(), "parentModel", null, 0, 1, ConfigDecisionModelEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getConfigDecisionModelEntry_ParentFolder(), this.getConfigDecisionFolder(), this.getConfigDecisionFolder_ChildEntries(), "parentFolder", null, 0, 1, ConfigDecisionModelEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getConfigDecisionModelEntry_Active(), ecorePackage.getEBoolean(), "active", "true", 1, 1, ConfigDecisionModelEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(configDecisionEClass, ConfigDecision.class, "ConfigDecision", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getConfigDecision_InclusionCriterion(), ecorePackage.getEString(), "inclusionCriterion", null, 0, 1, ConfigDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getConfigDecision_IncludedFeatures(), ecorePackage.getEString(), "includedFeatures", null, 0, 1, ConfigDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getConfigDecision_ExcludedFeatures(), ecorePackage.getEString(), "excludedFeatures", null, 0, 1, ConfigDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getConfigDecision_PersonInCharge(), ecorePackage.getEString(), "personInCharge", null, 0, 1, ConfigDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getConfigDecision_Rationale(), ecorePackage.getEString(), "rationale", null, 0, 1, ConfigDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getConfigDecision_Equivalence(), ecorePackage.getEBoolean(), "equivalence", null, 0, 1, ConfigDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(configDecisionFolderEClass, ConfigDecisionFolder.class, "ConfigDecisionFolder", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getConfigDecisionFolder_ChildEntries(), this.getConfigDecisionModelEntry(), this.getConfigDecisionModelEntry_ParentFolder(), "childEntries", null, 0, -1, ConfigDecisionFolder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(configDecisionModelElementEClass, ConfigDecisionModelElement.class, "ConfigDecisionModelElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(featureConfigurationEClass, FeatureConfiguration.class, "FeatureConfiguration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getFeatureConfiguration_PreviousConfigurationStep(), this.getFeatureConfiguration(), null, "previousConfigurationStep", null, 0, 1, FeatureConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureConfiguration_ConfiguredFeatureModel(), this.getFeatureModel(), null, "configuredFeatureModel", null, 0, 1, FeatureConfiguration.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);

		initEClass(userAttributeTypeEClass, UserAttributeType.class, "UserAttributeType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getUserAttributeType_Key(), ecorePackage.getEString(), "key", null, 1, 1, UserAttributeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getUserAttributeType_ValidFor(), ecorePackage.getEString(), "validFor", null, 1, 1, UserAttributeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getUserAttributeType_Description(), ecorePackage.getEString(), "description", null, 0, 1, UserAttributeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getUserAttributeType_Context(), this.getUserAttributeTypeContext(), this.getUserAttributeTypeContext_UserAttributeTypes(), "context", null, 0, 1, UserAttributeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getUserAttributeType_Type(), this.getStringConstrainingType(), null, "type", null, 1, 1, UserAttributeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(userAttributeValueEClass, UserAttributeValue.class, "UserAttributeValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getUserAttributeValue_Key(), ecorePackage.getEString(), "key", null, 1, 1, UserAttributeValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getUserAttributeValue_Value(), ecorePackage.getEString(), "value", null, 1, 1, UserAttributeValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getUserAttributeValue_Element(), this.getVariabilityModelElement(), this.getVariabilityModelElement_UserAttributeValues(), "element", null, 0, 1, UserAttributeValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(stringConstrainingTypeEClass, StringConstrainingType.class, "StringConstrainingType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getStringConstrainingType_PrimitiveType(), this.getPrimitiveType(), "primitiveType", "String", 1, 1, StringConstrainingType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getStringConstrainingType_Min(), ecorePackage.getEDouble(), "min", "0.0", 0, 1, StringConstrainingType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getStringConstrainingType_Max(), ecorePackage.getEDouble(), "max", "100.0", 0, 1, StringConstrainingType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getStringConstrainingType_Pattern(), ecorePackage.getEString(), "pattern", "*", 0, 1, StringConstrainingType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getStringConstrainingType_Values(), ecorePackage.getEString(), "values", null, 0, -1, StringConstrainingType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getStringConstrainingType_Default(), ecorePackage.getEString(), "default", null, 0, 1, StringConstrainingType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureModelPrototypeEClass, FeatureModelPrototype.class, "FeatureModelPrototype", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getFeatureModelPrototype_PrototypeName(), ecorePackage.getEString(), "prototypeName", null, 0, 1, FeatureModelPrototype.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getFeatureModelPrototype_Path(), ecorePackage.getEString(), "path", null, 0, -1, FeatureModelPrototype.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getFeatureModelPrototype_Type(), this.getFeatureModel(), null, "type", null, 1, 1, FeatureModelPrototype.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variableEntityEClass, VariableEntity.class, "VariableEntity", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariableEntity_AllProperties(), this.getVariableProperty(), null, "allProperties", null, 0, -1, VariableEntity.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
		initEReference(getVariableEntity_Parts(), this.getVariableEntityPart(), null, "parts", null, 0, -1, VariableEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getVariableEntity_Applications(), this.getCDMApplication(), null, "applications", null, 0, -1, VariableEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getVariableEntity_Diagram(), ecorePackage.getEObject(), null, "diagram", null, 0, 1, VariableEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variablePropertyEClass, VariableProperty.class, "VariableProperty", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariableProperty_ParentEntity(), this.getVariableEntity(), null, "parentEntity", null, 0, 1, VariableProperty.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
		initEAttribute(getVariableProperty_Optional(), ecorePackage.getEBoolean(), "optional", null, 0, 1, VariableProperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getVariableProperty_Visibility(), this.getVisibility(), "visibility", null, 0, 1, VariableProperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variableEntityPartEClass, VariableEntityPart.class, "VariableEntityPart", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariableEntityPart_Type(), this.getVariableEntity(), null, "type", null, 1, 1, VariableEntityPart.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(entityConfigurationEClass, EntityConfiguration.class, "EntityConfiguration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEntityConfiguration_FeatureConfigurations(), this.getFeatureConfiguration(), null, "featureConfigurations", null, 0, -1, EntityConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEntityConfiguration_SubEntityConfigurations(), this.getEntityConfiguration(), null, "subEntityConfigurations", null, 0, -1, EntityConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEntityConfiguration_ConfiguredEntity(), this.getVariableEntity(), null, "configuredEntity", null, 1, 1, EntityConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEntityConfiguration_ConfiguredPart(), this.getVariableEntityPart(), null, "configuredPart", null, 0, 1, EntityConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEntityConfiguration_SelectedProperties(), ecorePackage.getEString(), "selectedProperties", null, 0, -1, EntityConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEntityConfiguration_DeselectedProperties(), ecorePackage.getEString(), "deselectedProperties", null, 0, -1, EntityConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(cdmApplicationEClass, CDMApplication.class, "CDMApplication", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCDMApplication_SourceConfigurations(), this.getNameSequence(), null, "sourceConfigurations", null, 0, -1, CDMApplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCDMApplication_TargetConfigurations(), this.getNameSequence(), null, "targetConfigurations", null, 0, -1, CDMApplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCDMApplication_AppliedCDM(), this.getConfigDecisionModel(), null, "appliedCDM", null, 1, 1, CDMApplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(namedElementEClass, NamedElement.class, "NamedElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getNamedElement_Name(), ecorePackage.getEString(), "name", null, 0, 1, NamedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getNamedElement_Description(), ecorePackage.getEString(), "description", null, 0, 1, NamedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(userAttributeTypeContextEClass, UserAttributeTypeContext.class, "UserAttributeTypeContext", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getUserAttributeTypeContext_UserAttributeTypes(), this.getUserAttributeType(), this.getUserAttributeType_Context(), "userAttributeTypes", null, 0, -1, UserAttributeTypeContext.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variabilityDiagramEClass, VariabilityDiagram.class, "VariabilityDiagram", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getVariabilityDiagram_Diagram(), ecorePackage.getEObject(), null, "diagram", null, 0, 1, VariabilityDiagram.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(nameSequenceEClass, NameSequence.class, "NameSequence", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getNameSequence_Names(), this.getNamedElement(), null, "names", null, 0, -1, NameSequence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getNameSequence_InitialSize(), ecorePackage.getEInt(), "initialSize", null, 0, 1, NameSequence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Initialize enums and add enum literals
		initEEnum(complianceLevelEEnum, ComplianceLevel.class, "ComplianceLevel");
		addEEnumLiteral(complianceLevelEEnum, ComplianceLevel.NONE);
		addEEnumLiteral(complianceLevelEEnum, ComplianceLevel.FODA);
		addEEnumLiteral(complianceLevelEEnum, ComplianceLevel.FORM);
		addEEnumLiteral(complianceLevelEEnum, ComplianceLevel.CZARNECKI01);
		addEEnumLiteral(complianceLevelEEnum, ComplianceLevel.CZARNECKI04);
		addEEnumLiteral(complianceLevelEEnum, ComplianceLevel.REI_SM);

		initEEnum(deviationPermissionEEnum, DeviationPermission.class, "DeviationPermission");
		addEEnumLiteral(deviationPermissionEEnum, DeviationPermission.NO);
		addEEnumLiteral(deviationPermissionEEnum, DeviationPermission.APPEND);
		addEEnumLiteral(deviationPermissionEEnum, DeviationPermission.SUBSET);
		addEEnumLiteral(deviationPermissionEEnum, DeviationPermission.SUBTREE);
		addEEnumLiteral(deviationPermissionEEnum, DeviationPermission.YES);

		initEEnum(primitiveTypeEEnum, PrimitiveType.class, "PrimitiveType");
		addEEnumLiteral(primitiveTypeEEnum, PrimitiveType.INTEGER);
		addEEnumLiteral(primitiveTypeEEnum, PrimitiveType.FLOAT);
		addEEnumLiteral(primitiveTypeEEnum, PrimitiveType.STRING);
		addEEnumLiteral(primitiveTypeEEnum, PrimitiveType.BOOLEAN);

		initEEnum(visibilityEEnum, Visibility.class, "Visibility");
		addEEnumLiteral(visibilityEEnum, Visibility.PUBLIC);
		addEEnumLiteral(visibilityEEnum, Visibility.PRIVATE);

		// Create resource
		createResource(eNS_URI);

		// Create annotations
		// http://www.eclipse.org/emf/2002/Ecore
		createEcoreAnnotations();
	}

	/**
	 * Initializes the annotations for <b>http://www.eclipse.org/emf/2002/Ecore</b>.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected void createEcoreAnnotations() {
		String source = "http://www.eclipse.org/emf/2002/Ecore";		
		addAnnotation
		  (featureEClass, 
		   source, 
		   new String[] {
			 "constraints", "FeatureInheritance"
		   });		
		addAnnotation
		  (featureLinkEClass, 
		   source, 
		   new String[] {
			 "constraints", "CorrectDirection"
		   });		
		addAnnotation
		  (featureConstraintEClass, 
		   source, 
		   new String[] {
			 "constraints", "LegalConstraint"
		   });		
		addAnnotation
		  (configDecisionEClass, 
		   source, 
		   new String[] {
			 "constraints", "LegalInclusionCriterion LegalInclExclFeatures"
		   });		
		addAnnotation
		  (namedElementEClass, 
		   source, 
		   new String[] {
			 "constraints", "NamingConventions"
		   });
	}

} //CvmPackageImpl
